/*
 * Copyright (c) 2018-2999 湖南洛云网络科技有限公司 All rights reserved.
 *
 * https://www.gz-yami.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.dao;

import java.util.List;

import com.yami.shop.bean.model.Category;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

/**
 * @author yami
 */
public interface CategoryMapper extends BaseMapper<Category> {

    /**
     * 根据父分类ID获取所有该父分类ID下的子分类列表
     * @param parentId 父分类ID
     * @param dbLang 当前选择语言
     * @return 子分类列表
     */
	List<Category> listByParentId(@Param("parentId") Long parentId, @Param("lang") Integer dbLang);

    /**
     * 根据一级分类ID查找所有该分类下的所有三级分类列表
     * @param parentId 一级分类ID
     * @param dbLang 当前选择语言
     * @return 三级分类列表
     */
    List<Category> listThreeByParentId(@Param("parentId") Long parentId, @Param("lang") Integer dbLang);

    /**
     * 根据分类ID获取该分类的父分类ID
     * @param parentId 分类ID
     * @return 父分类ID
     */
    Long getParentCategoryByParentId(@Param("parentId") Long parentId);

    /**
     * 根据分类查找条件参数查找分类列表
     * @param category 分类查找条件参数
     * @return 分类列表
     */
    List<Category> categoryList(@Param("category") Category category);

    /**
     * 根据条件查找分类列表
     * @param lang 当前选择语言
     * @param maxGrade 最大级别
     * @param parentId 父分类ID
     * @param status 状态
     * @param shopId 店铺ID
     * @return 分类列表
     */
    List<Category> listByLang(@Param("lang") Integer lang, @Param("maxGrade") Integer maxGrade,
                              @Param("parentId") Long parentId, @Param("status") Integer status, @Param("shopId") Long shopId);

    /**
     * 根据分类ID与店铺ID获取分类信息
     * @param categoryId 分类ID
     * @param shopId 店铺ID
     * @return 分类信息
     */
    Category getCategory(@Param("categoryId") Long categoryId, @Param("shopId") Long shopId);

    /**
     * 根据名称查找名称相同的分类数量，如果设置了category_id参数，则等于category_id等于该参数的分类不参与运算
     * @param category 分类查找参数
     * @return 相同名称的数量
     */
    Integer getCategoryName(@Param("category") Category category);

    /**
     * 根据条件参数获取分类列表
     * @param lang 当前选择语言
     * @param grade 最大级别
     * @param status 状态
     * @param shopId 店铺ID
     * @return 分类列表
     */
    List<Category> listByGrade(@Param("lang") Integer lang, @Param("grade") Integer grade, @Param("status") Integer status, @Param("shopId") Long shopId);

    /**
     * 根据条件参数获取分类列表
     * @param shopId 店铺ID
     * @param parentId 父分类ID
     * @param dbLang 当前选择语言
     * @return 分类列表
     */
    List<Category> listSelect(@Param("shopId") Long shopId, @Param("parentId") Long parentId, @Param("lang") Integer dbLang);

    List<Long> selectListCategoryIdByParentId(@Param("parentId")Long parentId);

    List<Long> selectListCategoryIdByParentIds(@Param("parentIds")List<Long> parentIds);
}
